package com.zp.self.module.level_4_算法练习.脑筋急转弯;

/**
 * @author By ZengPeng
 */
public class 力扣_59_螺旋矩阵II {
    //测试
    public static void main(String[] args) {
        int[][] ints = new 力扣_59_螺旋矩阵II().generateMatrix(20);
        for (int[] anInt : ints) {
            for (int i : anInt)
                System.out.print(i+",");
            System.out.println();
        }

    }

    /**
    题目：给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，
     且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

     示例 1：
     输入：n = 3
     输出：[[1,2,3],[8,9,4],[7,6,5]]

     示例 2：
     输入：n = 1
     输出：[[1]]


    分析：【perfect】
       1.用变量记录当前是第几个循环了

    边界值 & 注意点：
       1.判断当前值是否已经被赋值
     **/
    public int[][] generateMatrix(int n) {
        int[][] arr = new int[n][n];
        int circle=0,numb=1,len =n-1;
        while (circle<=n/2){
            for (int i = circle; i <= len-circle; i++) {//向右，包含起始点
                arr[circle][i]=numb++;
            }
            for (int i = circle+1; i <len-circle; i++) {//向下，不含起始点
                arr[i][len-circle]=numb++;
            }
            if(circle!=len-circle){
                for (int i = len-circle; i >=circle; i--) //向左，包含起始点
                    arr[len-circle][i]=numb++;

                for (int i = len-circle-1; i >circle; i--) //向上，不含起始点
                    arr[i][circle]=numb++;
            }
            circle++;
        }
        return arr;
    }
}
